/**
 * VTable初始化配置
 * 为VTable提供必要的全局环境设置
 */

// 安全地为VTable提供OS检测信息
const isWindows = () => {
  try {
    return typeof navigator !== 'undefined' && navigator && 
      (navigator.userAgent.indexOf('Windows') !== -1 || 
       (navigator.platform && navigator.platform.indexOf('Win') !== -1));
  } catch (e) {
    return true; // 默认为Windows
  }
};

// 为全局提供process对象 (VTable需要)
export const initVTable = () => {
  if (typeof window !== 'undefined' && !window.process) {
    window.process = { 
      platform: isWindows() ? 'win32' : 'unknown',
      env: {} 
    };
  }
};

// 默认表格配置
export const defaultTableConfig = {
  theme: {
    defaultStyle: {
      borderLineWidth: 1,
      borderColor: '#e5e7eb',
      fontSize: 12,
      fontFamily: '-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif'
    },
    headerStyle: {
      fontSize: 12,
      height: 32,
      bgColor: '#f5f7fa',
      color: '#606266',
      fontWeight: 'bold'
    },
    bodyStyle: {
      fontSize: 12,
      height: 28,
      padding: [4, 8]
    },
    columnResize: {
      lineWidth: 2,
      lineColor: '#3b82f6',
      handleWidth: 8,
      handleVisibleTime: 'always'
    }
  },
  columnResizeMode: 'all',
  columnResizeLineMode: 'inner',
  rowResizeMode: 'none',
  widthResize: true,
  heightResize: true,
  autoRowHeight: false,
  autoWrapText: true,
  defaultRowHeight: 28,
  defaultHeaderRowHeight: 32,
  minColumnWidth: 60,
  maxColumnWidth: 600,
  // 添加编辑相关的默认配置
  editor: {
    disableSelect: false,
    clickToSwitchEdit: true
  }
};

// 数据类型样式映射
export const getDataTypeStyle = (value, type) => {
  const baseStyle = {
    fontSize: 12,
    lineHeight: 1.3
  };
  
  // NULL值样式
  if (value === null || value === undefined) {
    return { ...baseStyle, color: '#999', fontStyle: 'italic' };
  }
  
  // 根据数据类型定制样式
  switch (type?.toLowerCase()) {
    case 'int':
    case 'integer':
    case 'bigint':
    case 'decimal':
    case 'float':
    case 'double':
    case 'number':
      return { ...baseStyle, textAlign: 'right', color: '#67C23A' };
      
    case 'boolean':
    case 'bool':
    case 'bit':
      return { ...baseStyle, color: value ? '#409EFF' : '#F56C6C', fontWeight: 'bold' };
      
    case 'date':
    case 'datetime':
    case 'timestamp':
      return { ...baseStyle, color: '#E6A23C' };
      
    case 'json':
    case 'jsonb':
      return { ...baseStyle, fontFamily: 'monospace', color: '#909399' };
      
    default:
      // 字符串类型
      if (typeof value === 'string' && value.length > 100) {
        return { ...baseStyle, fontSize: 11 };
      }
      return baseStyle;
  }
};

// 数据格式化
export const formatCellValue = (value, type) => {
  if (value === null || value === undefined) {
    return 'NULL';
  }
  
  switch (type?.toLowerCase()) {
    case 'boolean':
    case 'bool':
    case 'bit':
      return value ? 'TRUE' : 'FALSE';
      
    case 'json':
    case 'jsonb':
      try {
        return typeof value === 'string' ? value : JSON.stringify(value, null, 2);
      } catch {
        return String(value);
      }
      
    case 'date':
      // 仅显示日期部分
      if (value instanceof Date) {
        return value.toLocaleDateString();
      }
      return String(value).split('T')[0];
      
    case 'datetime':
    case 'timestamp':
      // 显示日期和时间
      if (value instanceof Date) {
        return value.toLocaleString();
      }
      return String(value);
      
    default:
      return String(value);
  }
};

// 数据验证函数
export const validateCellValue = (value, type) => {
  // 空值检查（NULL值通常是允许的）
  if (value === null || value === undefined || value === '') {
    return { valid: true }
  }
  
  // 根据数据类型进行验证
  switch (type?.toLowerCase()) {
    case 'int':
    case 'integer':
    case 'bigint':
      const intVal = parseInt(value)
      if (isNaN(intVal) || intVal.toString() !== value.toString().trim()) {
        return { valid: false, message: '请输入有效的整数' }
      }
      return { valid: true, value: intVal }
      
    case 'decimal':
    case 'float':
    case 'double':
    case 'number':
      const floatVal = parseFloat(value)
      if (isNaN(floatVal)) {
        return { valid: false, message: '请输入有效的数字' }
      }
      return { valid: true, value: floatVal }
      
    case 'boolean':
    case 'bool':
    case 'bit':
      const boolStr = value.toString().toLowerCase()
      if (!['true', 'false', '1', '0', 'yes', 'no'].includes(boolStr)) {
        return { valid: false, message: '请输入布尔值 (true/false)' }
      }
      return { valid: true, value: ['true', '1', 'yes'].includes(boolStr) }
      
    case 'date':
      const dateVal = new Date(value)
      if (isNaN(dateVal.getTime())) {
        return { valid: false, message: '请输入有效的日期' }
      }
      return { valid: true, value: dateVal.toISOString().split('T')[0] }
      
    case 'datetime':
    case 'timestamp':
      const datetimeVal = new Date(value)
      if (isNaN(datetimeVal.getTime())) {
        return { valid: false, message: '请输入有效的日期时间' }
      }
      return { valid: true, value: datetimeVal.toISOString() }
      
    case 'json':
    case 'jsonb':
      try {
        const jsonVal = typeof value === 'string' ? JSON.parse(value) : value
        return { valid: true, value: jsonVal }
      } catch (e) {
        return { valid: false, message: '请输入有效的JSON格式' }
      }
      
    default:
      // 字符串类型，不需要特殊验证
      return { valid: true, value: value.toString() }
  }
}

// 获取对应数据类型的编辑器
export const getEditorType = (type) => {
  switch (type?.toLowerCase()) {
    case 'boolean':
    case 'bool':
    case 'bit':
      return 'checkbox'; // VTable内置的checkbox编辑器
      
    case 'date':
    case 'datetime':
    case 'timestamp':
      return 'date-input'; // VTable内置的日期编辑器
      
    case 'int':
    case 'integer':
    case 'bigint':
    case 'decimal':
    case 'float':
    case 'double':
    case 'number':
      return 'input'; // 使用input编辑器，但可以添加数字验证
      
    default:
      return 'input'; // 默认使用input编辑器
  }
}; 